const { Schema, model } = require('mongoose')

const joi = require('joi')

const userSchema = new Schema(
  {
    uname: {
      type: String,
      required: true,
      minlength: 2,
      maxlength: 20
    },
    email: {
      type: String,
      required: true,
      unique: true // 保证唯一
    },
    pwd: {
      type: String,
      required: true
    },
    // normal: 普通用户, admin: 管理员
    role: {
      type: String,
      enum: ['normal', 'admin'],
      default: 'normal'
    },
    // 0: 禁用, 1: 启用
    status: {
      type: Number,
      enum: [0, 1],
      default: 1
    }
  },
  { versionKey: false }
)

const User = model('User', userSchema, 'User')

// ;(async () => {
//   await User.create({
//     uname: 'zs',
//     email: 'zs@itcast.cn',
//     pwd: '$2b$10$ltI6moD1nTeW6OnIKtb4MeT8RN8DnSWw8GQ5HdBiH8TKuze9s6Fi2',
//     role: 'normal',
//     status: 1
//   })
//   console.log('默认用户创建成功')
// })()

const addUserValidate = user => {
  const schema = {
    uname: joi
      .string()
      .required()
      .min(2)
      .max(20)
      .error(new Error('用户名不符合验证规则')),
    email: joi
      .string()
      .required()
      .email()
      .error(new Error('邮箱不符合验证规则')),
    pwd: joi
      .string()
      .required()
      .min(6)
      .max(16)
      .error(new Error('密码不符合验证规则')),
    role: joi
      .string()
      .required()
      .valid('normal', 'admin')
      .error(new Error('角色不符合验证规则')),
    status: joi
      .number()
      .required()
      .valid(0, 1)
      .error(new Error('状态不符合验证规则'))
  }
  return joi.validate(user, schema)
}

const editUserValidate = user => {
  const schema = {
    id: joi
      .string()
      .required()
      .error(new Error('用户id非法')),
    uname: joi
      .string()
      .required()
      .min(2)
      .max(20)
      .error(new Error('用户名不符合验证规则')),
    email: joi
      .string()
      .required()
      .email()
      .error(new Error('邮箱不符合验证规则')),
    pwd: joi
      .string()
      .required()
      .regex(/^\w{6,16}$/)
      .error(new Error('密码不符合验证规则')),
    role: joi
      .string()
      .required()
      .valid('normal', 'admin')
      .error(new Error('角色不符合验证规则')),
    status: joi
      .number()
      .required()
      .valid(0, 1)
      .error(new Error('状态不符合验证规则'))
  }
  return joi.validate(user, schema)
}

module.exports = { User, addUserValidate, editUserValidate }
